package com.bjsxy.user;

import java.lang.reflect.Constructor;

/**通过反射获取构造方法*/
//不带参数
/*getDeclaredConstructors()  返回Constructor 对象的一个数组，这些对象反映此
* Class对象表示的类声明的 所有 构造方法*/
/*getConstructors()  返回一个包含 某些 Constructor对象的数组，这些
对象反应此Class对象所表示的类的所有公共（public）构造方法*/
//带参数
/*getConstructor(Class<?>  parameterTypes)   返回 一个 Constructor对象  它反映
* 此Class对象表示的类声明的 公共（public）  构造方法*/
/*getDeclaredConstructor(Class<?> parameterTypes)  返回 一个 Constructor对象
* 该对象反映此Class对象所表示的类或接口的指定方法*/
public class GetConstructor {
    public static void main(String[] args) throws Exception{
        Class clazz = Users.class;//静态方法 .class
        //返回Constructor 对象的一个数组  所有 构造方法  所以要遍历
        Constructor arr[] = clazz.getDeclaredConstructors();
        for(Constructor s:arr){
            System.out.println(s);
        }
        System.out.println("===============");
        //返回Constructor 对象的一个数组  所有公共（public）构造方法
        Constructor arr1[] = clazz.getConstructors();
        for(Constructor s1:arr1){
            System.out.println(s1);
        }
        System.out.println("===============");
        //返回 一个 Constructor对象  有异常要处理
       /* Constructor c = null;
        try {
            c = clazz.getConstructor(int.class);
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        }*/
       // Constructor c = clazz.getConstructor(int.class);
        //输出异常，因为int类型是private, 不是public
       // System.out.println(c);
        System.out.println("===============");
        Constructor c1 = clazz.getDeclaredConstructor(int.class);
        System.out.println(c1);
        System.out.println("================");
        Constructor c2 = clazz.getConstructor(String.class);
        System.out.println(c2);
        System.out.println("======获取无参构造方法=======");
        Constructor c3 = clazz.getConstructor(null);
        System.out.println(c3);
    }
}
